import router from './router'
import store from './store'

// 白名单
const whiteList = ['/login']
/**
 * 路由守卫
 * @param {*} to 要去的路由信息
 * @param {*} form 来自哪个路由信息
 * @param {*} next 放行的方法
 */
router.beforeEach(async (to, from, next) => {
  // if (from.path === '/login') {
  //   return
  // }
  // 1. 用户已经登陆，不允许进入login页面
  // 2. 用户没有登陆，只允许进入login页面
  if (store.getters.token) {
    // 有token
    if (to.path === '/login') {
      // 如果是去登录页，直接跳转到首页
      next('/')
    } else {
      // 如果不是去登录页，判断用户是否有用户信息,如果没有，就去获取用户信息
      if (!store.getters.hasUserInfo) {
        const { permission } = await store.dispatch('user/getUserInfo')
        // 处理用户权限，筛选出需要添加的权限
        const filterRoutes = await store.dispatch(
          'permission/filterRoutes',
          permission.menus
        )
        // 利用 addRoute 循环添加
        filterRoutes.forEach((item) => {
          router.addRoute(item)
        })
        // 添加完动态路由之后，需要在进行一次主动跳转
        return next(to.path)
      }
      // 如果不是去登录页，直接放行
      next()
    }
  } else {
    // 没有token
    if (whiteList.indexOf(to.path) > -1) {
      // 如果是去登录页，直接放行
      next()
    } else {
      // 如果不是去登录页，直接跳转到登录页
      next('/login')
    }
  }
})
